<?php

namespace app\common\model\User;

use think\Model;

// 软删除的模型
use traits\model\SoftDelete;

/**
 * 用户模型
 */
class User extends Model
{
    //继承软删除
    use SoftDelete;

    //模型对应的是哪张表
    protected $table = "pre_user";

    //指定一个自动设置的时间字段
    //开启自动写入
    protected $autoWriteTimestamp = true; 

    //设置字段的名字
    protected $createTime = "createtime"; //插入的时候设置的字段名

    //禁止 写入的时间字段
    protected $updateTime = false;

    // 软删除的字段
    protected $deleteTime = 'deletetime';

    //定义一个模型自带的属性 追加的意思 当用模型来查询的时候 查询的结果中  会自动的带上以下的两个字段
    //获取器的作用 将原本查到的结果字段来进行二次修改
    //0,1,2
    //定义了字段 或者查询中打印出来，如果没有添加 在打印结果的时候 你看不到组装的字段 但是 获取的时候 是能够拿到的
    protected $append = [
        'sex_text', //性别
        'cover_cdn',  //封面获取器
        //getAvatarCdnAttr
        'avatar_cdn',  //头像获取器 //
        'region', //地区字符串 
    ];

    //新建一个获取器
    // value 是 sex这个字段的值
    // public function getSexAttr($value) 覆盖原字段
    //sex_text

    //增加新字段 sex_text
    public function getSexTextAttr($value, $data) 
    {
        $sexlist = [0 => '保密', 1 => '男', 2 => '女'];
        return $sexlist[$data['sex']];
    }

    //增加新字段
    public function getAuthTextAttr($value, $data) 
    {
        $authlist = [0 => '未验证', 1 => '已验证'];
        return $authlist[$data['auth']];
    }

    // 图片字段的验证器  avatar_cdn
    // 1 参数1：所关联的字段的值 undefined
    // 2 参数2：代表查询结果的  整一条记录
    public function getAvatarCdnAttr($value, $data)
    {
        $avatar = is_file($data['avatar']) ? '/'.$data['avatar'] : '/assets/home/images/avatar.jpg';

        //获取的是 config.php 当中 cdn选项
        $cdn = config('cdn');

        return $cdn.$avatar;
    }

    public function getCoverCdnAttr($value, $data)
    {
        $avatar = is_file($data['cover']) ? '/'.$data['cover'] : '/assets/home/images/back.jpg';

        //获取的是 config.php 当中 cdn选项 cdn 静态的资源域名
        $cdn = config('cdn');

        return $cdn.$avatar;
    }

    //地区获取器  get Region Attr
    public function getRegionAttr($value, $data)
    {
        $province = model('Region')->where(['code' => $data['province']])->find();

        $city = model('Region')->where(['code' => $data['city']])->find();

        $district = model('Region')->where(['code' => $data['district']])->find();

        $output = [];

        if($province)
        {
            $output[] = $province['name'];
        }

        if($city)
        {
            $output[] = $city['name'];
        }

        if($district)
        {
            $output[] = $district['name'];
        }

        //广东省-广州市-海珠区
        return implode('-', $output);
    }

    //给模型定义一个关联查询
    public function provinces()
    {
        // belongsTo('关联模型名','外键名','关联表主键名',['模型别名定义'],'join类型');
        //参数1：关联的模型
        //参数2：用户表的外键的字段
        //参数3：关联表的主键
        //参数4：模型别名
        //参数5：链接方式 left
        // setEagerlyType(1) IN查询
        // setEagerlyType(0) JOIN查询
        return $this->belongsTo('app\common\model\Region', 'province', 'code', [], 'LEFT')->setEagerlyType(0);
    }

    //查询城市
    public function citys()
    {
        return $this->belongsTo('app\common\model\Region', 'city', 'code', [], 'LEFT')->setEagerlyType(0);
    }

    //查询地区
    public function districts()
    {
        return $this->belongsTo('app\common\model\Region', 'district', 'code', [], 'LEFT')->setEagerlyType(0);
    }




}
